﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using System.Reflection;
using System.ComponentModel; // for INotify
using System.Collections; //for Stack
using System.Xml.Serialization;
using System.Windows.Media.Animation;
using System.Windows.Threading;
using System.Threading;

namespace ShumaDaf
{
    public class Setta
    {
        public int num;
        public DataGridLength width;
        public Visibility visible;
        private DataSet set;
        private MainWindow owner;
        private string path = "ShumadubSettings.xml";

        public Setta(MainWindow win)
        {
            owner = win;
            set = new DataSet();
            initTables();
            readSettings();
        }

        public void broken()
        {
            clearTableProp();
            owner.ShowMessage("Файл настроек поврежден. Настройки сброшены в настройки по умолчанию");
            writeSettings();
        }

        public void clearTableProp()
        {
            if (set.Tables["TableProperties"] != null)
            {
                set.Tables.Remove("TableProperties");
            }

        }

        private void initTables()
        {
            if (set.Tables["TableProperties"] == null)
            {
                set.Tables.Add("TableProperties");
            }
            if (set.Tables["TableProperties"].Columns["n"] == null)
            {
                set.Tables["TableProperties"].Columns.Add("n");
                set.Tables["TableProperties"].Columns.Add("width");
                set.Tables["TableProperties"].Columns.Add("visible");
                set.Tables["TableProperties"].Columns.Add("index");
                set.Tables["TableProperties"].Columns.Add("header");
                set.Tables["TableProperties"].Columns["n"].DataType = System.Type.GetType("System.Int32");
                set.Tables["TableProperties"].Columns["width"].DataType = System.Type.GetType("System.Double");
                set.Tables["TableProperties"].Columns["visible"].DataType = System.Type.GetType("System.Boolean");
                set.Tables["TableProperties"].Columns["index"].DataType = System.Type.GetType("System.Int32");
            }

        }

        public void addTableProp(int n, DataGridLength l, Visibility v, int index, string header)
        {
            initTables();
            DataRow r = set.Tables["TableProperties"].NewRow();
            r["n"] = n;
            r["width"] = l.DisplayValue;
            r["visible"] = v == Visibility.Visible ? true : false;
            r["index"] = index;
            r["header"] = header;
            set.Tables["TableProperties"].Rows.Add(r);
        }

        public void addSettings<T>(IEnumerable obj) where T : DependencyObject
        {

        }

        public void writeSettings()
        {
            try
            {
                set.WriteXml(path);
            }
            catch (Exception e)
            {
                owner.ShowMessage("Ошибка сохранения настроек.  :( " + e.ToString());
            }
        }

        public DataSet getSettings() { return set; }

        public DataSet readSettings()
        {
            if (File.Exists(path))
            {
                try
                {
                    set.ReadXml(path);

                }
                catch (Exception)
                {
                    owner.ShowMessage("Ошибка чтения файла настроек. Возможно он поврежден или устарел. Настройки сброшены в настройки по умолчанию");
                    return null;
                }
                return set;
            }
            if (owner != null) owner.ShowMessage("Настройки не обнаружены, возможно это первый запуск на данном компьютере. Настройки будут созданы автоматически");
            return null;
        }

    }
}
